const axios = require('axios');
const SERVER_URL = 'https://api.live.bilibili.com';

const GET_ROOM_LIST = '/xlive/web-interface/v1/second/getList';
const GET_ROOM_GIFT_INFO = '/xlive/lottery-interface/v1/lottery/getLotteryInfoWeb';
const GET_AREA_LIST = '/xlive/web-interface/v1/index/getWebAreaList';

/**
 * 获取 Bilibili 直播列表数据
 *
 * @param {Object} params 请求参数对象，包含以下属性：
 *   - platform: 平台类型，值为 'web' 表示网页端（必选）
 *   - parent_area_id: 父分区 ID（必选）
 *   - area_id: 分区 ID（必选）
 *   - sort_type: 排序类型，取值为 'sort_type_124'、'sort_type_128'、'sort_type_129' 或 'sort_type_152' 之一（必选）
 *   - page: 页码（必选）
 */
function getRoomList(params) {
  const url = `${SERVER_URL}${GET_ROOM_LIST}`;

  return axios.get(url, { params })
    .then(response => {
      const result = response.data;

      if (result.code === 0) {
        return result.data.list;
      } else {
        throw new Error(`请求失败：${result.message}`);
      }
    })
    .catch(error => {
      console.error('请求出错');
    });
}

/**
 * 获取 Bilibili 直播间礼物数据
 *
 * @param {Object} params 请求参数对象，包含以下属性：
 *   - roomid: 房间id
 *   - room: 房间详情
 */
function getRoomGiftInfo(params) {
  const url = `${SERVER_URL}${GET_ROOM_GIFT_INFO}`;

  return axios.get(url, { params })
    .then(response => {
      const result = response.data;

      if (result.code === 0) {
        return {
          roomid: params.roomid,
          fetchTime: Math.floor(new Date().valueOf() / 1000),
          data: result.data,
          room: params.room,
        };
      } else {
        throw new Error(`请求失败：${result.message}`);
      }
    })
    .catch(error => {
      console.error('请求出错');
    });
}

/**
 * 获取 Bilibili 分区数据
 *
 * @param {Object} params 请求参数对象，包含以下属性：
 *   - source_id: 2
 */
function getAreaList(params) {
  const url = `${SERVER_URL}${GET_AREA_LIST}`;

  return axios.get(url, { params })
    .then(response => {
      const result = response.data;

      if (result.code === 0) {
        return result.data.data;
      } else {
        throw new Error(`请求失败：${result.message}`);
      }
    })
    .catch(error => {
      console.error("请求出错");
    });
}

module.exports = {
  getRoomList,
  getRoomGiftInfo,
  getAreaList
}